package model

import (
	"boy-go/pkg/xstr"
	"time"
)

// GenTableColumn 代码生成业务字段表 表：gen_table_column
type GenTableColumn struct {
	ColumnId      int64      `gorm:"primary_key;column:column_id"` // 编号
	TableId       int64      `gorm:"column:table_id"`              // 归属表编号
	ColumnName    string     `gorm:"column:column_name"`           // 列名称
	ColumnComment string     `gorm:"column:column_comment"`        // 列描述
	ColumnType    string     `gorm:"column:column_type"`           // 列类型
	StructType    string     `gorm:"column:struct_type"`           // struct类型
	StructField   string     `gorm:"column:struct_field"`          // struct字段名
	IsPk          string     `gorm:"column:is_pk"`                 // 是否主键（1是）
	IsIncrement   string     `gorm:"column:is_increment"`          // 是否自增（1是）
	IsRequired    string     `gorm:"column:is_required"`           // 是否必填（1是）
	IsInsert      string     `gorm:"column:is_insert"`             // 是否为插入字段（1是）
	IsEdit        string     `gorm:"column:is_edit"`               // 是否编辑字段（1是）
	IsList        string     `gorm:"column:is_list"`               // 是否列表字段（1是）
	IsQuery       string     `gorm:"column:is_query"`              // 是否查询字段（1是）
	QueryType     string     `gorm:"column:query_type"`            // 查询方式（等于、不等于、大于、小于、范围）
	HtmlType      string     `gorm:"column:html_type"`             // 显示类型（文本框、文本域、下拉框、复选框、单选框、日期控件）
	DictType      string     `gorm:"column:dict_type"`             // 字典类型
	Sort          int64      `gorm:"column:sort"`                  // 排序
	CreateBy      *string    `gorm:"column:create_by"`             // 创建者
	CreateAt      *time.Time `gorm:"column:create_time"`           // 创建时间
	UpdateBy      *string    `gorm:"column:update_by"`             // 更新者
	UpdateAt      *time.Time `gorm:"column:update_time"`           // 更新时间
}

// TableName 表名
func (s GenTableColumn) TableName() string {
	return "gen_table_column"
}

func (s *GenTableColumn) IsSuperColumn() bool {
	return _isSuperColumn(s.StructField)
}
func _isSuperColumn(structField string) bool {
	datas := []string{"createBy", "createTime", "updateBy", "updateTime", "remark", "parentName", "parentId", "orderNum", "ancestors"}
	// 判断是否包含
	for _, v := range datas {
		if v == structField {
			return true
		}
	}
	return false
}

func (s *GenTableColumn) IsUsableColumn() bool {
	return _isUsableColumn(s.StructField)
}

func _isUsableColumn(field string) bool {
	return xstr.EqualsAny(field, "parentId", "orderNum", "remark")
}
